home *** CD-ROM | disk | FTP | other *** search
/ BCI NET 2 / BCI NET 2.iso / archives / programming / e / mui23edev.lha / Amiga_E / Sources / PopUp.e < prev   
Encoding:
Text File  |  1995-01-12  |  6.6 KB  |  308 lines

  1. /*
  2. **    Original C Code written by Stefan Stuntz
  3. **
  4. **    Translation into E by Jan Hendrik Schulz
  5. **
  6. */
  7.  
  8. /*
  9. ** Tell AmigaE v3.1 that we use macros
  10. */
  11.  
  12. OPT PREPROCESS /* remove this for AmigaE v2.1b and use Mac2E */
  13.  
  14. /*
  15. ** Loading the needed MODULEs
  16. */
  17.  
  18. MODULE 'muimaster', 'libraries/mui'
  19. MODULE 'utility/tagitem', 'utility/hooks'
  20. MODULE 'intuition/classes', 'intuition/classusr'
  21. MODULE 'libraries/asl'
  22.  
  23.  
  24. /*
  25. ** defining some CONSTs
  26. */
  27.  
  28. ENUM ER_NON, ER_MUILIB, ER_APP
  29.  
  30.  
  31. /*
  32. ** Now the two hook-functions
  33. */
  34.  
  35. PROC hook_StrObjFunc(pop,str)
  36.  
  37.    DEF x,s,i
  38.  
  39.    get(str,MUIA_String_Contents,{s})
  40.  
  41.    i:=0
  42.    LOOP
  43.       doMethod(pop,[MUIM_List_GetEntry,i,{x}])
  44.  
  45.       IF x=NIL
  46.  
  47.      set(pop,MUIA_List_Active,MUIV_List_Active_Off)
  48.      RETURN MUI_TRUE
  49.  
  50.       ELSEIF StrCmp(x,s,ALL)
  51.  
  52.      set(pop,MUIA_List_Active,i)
  53.      RETURN MUI_TRUE
  54.  
  55.       ENDIF
  56.    INC i
  57.    ENDLOOP
  58. ENDPROC
  59.  
  60.  
  61. PROC hook_ObjStrFunc(pop,str)
  62.  
  63.    DEF x
  64.  
  65.    doMethod(pop,[MUIM_List_GetEntry,MUIV_List_GetEntry_Active,{x}])
  66.    set(str,MUIA_String_Contents,x)
  67.  
  68. ENDPROC
  69.  
  70.  
  71. /*
  72. ** main PROC with exception handling
  73. */
  74.  
  75. PROC main() HANDLE
  76.  
  77.    DEF popNames
  78.    DEF hookStrObj:hook, hookObjStr:hook
  79.    DEF app,window,pop1,pop2,pop3,pop4,pop5,plist
  80.    DEF signals, result, active, running=TRUE
  81.  
  82. /*
  83. ** creating the hooks
  84. */
  85.  
  86.    installhook(hookStrObj, {hook_StrObjFunc})
  87.    installhook(hookObjStr, {hook_ObjStrFunc})
  88.  
  89. /*
  90. ** creating array for PopUp
  91. */
  92.  
  93.   popNames := [ 'Stefan Becker',
  94.         'Martin Berndt',
  95.         'Georg Heßmann',
  96.         'Martin Horneffer',
  97.         'Martin Huttenloher',
  98.         'Kai Iske',
  99.         'Oliver Kilian',
  100.         'Franke Mariak',
  101.         'Klaus Melchior',
  102.         'Armin Sander',
  103.         'Matthias Scheler',
  104.         'Andreas Schildbach',
  105.         'Wolfgang Schildbach',
  106.         'Christian Scholz',
  107.         'Markus Stipp',
  108.         'Ibrahim Solmaz',
  109.         'Henri Veistera',
  110.         'Alber Weinert',
  111.         NIL ]
  112.  
  113. /*
  114. ** open muimaster.library
  115. */
  116.  
  117.    IF (muimasterbase := OpenLibrary(MUIMASTER_NAME,MUIMASTER_VMIN))=NIL THEN Raise(ER_MUILIB)
  118.  
  119. /*
  120. ** creating the application
  121. */
  122.  
  123.    app := ApplicationObject,
  124.     MUIA_Application_Title      , 'Popup-Demo',
  125.     MUIA_Application_Version    , '$VER: Popup-Demo 8.37 (03.07.94)',
  126.     MUIA_Application_Copyright  , '©1993, Stefan Stuntz',
  127.     MUIA_Application_Author     , 'Stefan Stuntz',
  128.     MUIA_Application_Description, 'Demostrate popup objects.',
  129.     MUIA_Application_Base       , 'POPUP',
  130.  
  131.     SubWindow, window := WindowObject,
  132.         MUIA_Window_Title, 'Popup Objects',
  133.         MUIA_Window_ID   , "POPP",
  134.         WindowContents, VGroup,
  135.  
  136.         Child, ColGroup(2),
  137.  
  138.             Child, KeyLabel2('File:',"f"),
  139.             Child, pop1 := PopaslObject,
  140.             MUIA_Popstring_String, KeyString(0,256,"f"),
  141.             MUIA_Popstring_Button, PopButton(MUII_PopFile),
  142.             ASLFR_TITLETEXT, 'Please select a file...',
  143.             End,
  144.  
  145.             Child, KeyLabel2('Drawer:',"d"),
  146.             Child, pop2 := PopaslObject,
  147.             MUIA_Popstring_String, KeyString(0,256,"d"),
  148.             MUIA_Popstring_Button, PopButton(MUII_PopDrawer),
  149.             ASLFR_TITLETEXT  , 'Please select a drawer...',
  150.             ASLFR_DRAWERSONLY, MUI_TRUE,
  151.             End,
  152.  
  153.             Child, KeyLabel2('Font:',"o"),
  154.             Child, pop3 := PopaslObject,
  155.             MUIA_Popstring_String, KeyString(0,80,"o"),
  156.             MUIA_Popstring_Button, PopButton(MUII_PopUp),
  157.             MUIA_Popasl_Type , ASL_FONTREQUEST,
  158.             ASLFO_TITLETEXT  , 'Please select a font...',
  159.             End,
  160.  
  161.             Child, KeyLabel2('Fixed Font:',"i"),
  162.             Child, pop4 := PopaslObject,
  163.             MUIA_Popstring_String, KeyString(0,80,"i"),
  164.             MUIA_Popstring_Button, PopButton(MUII_PopUp),
  165.             MUIA_Popasl_Type , ASL_FONTREQUEST,
  166.             ASLFO_TITLETEXT  , 'Please select a fixed font...',
  167.             ASLFO_FIXEDWIDTHONLY, MUI_TRUE,
  168.             End,
  169.  
  170.             Child, KeyLabel2('Thanks To:',"n"),
  171.             Child, pop5 := PopobjectObject,
  172.             MUIA_Popstring_String, KeyString(0,60,"n"),
  173.             MUIA_Popstring_Button, PopButton(MUII_PopUp),
  174.             MUIA_Popobject_StrObjHook, hookStrObj,
  175.             MUIA_Popobject_ObjStrHook, hookObjStr,
  176.             MUIA_Popobject_Object, plist := ListviewObject,
  177.                 MUIA_Listview_List, ListObject,
  178.                 InputListFrame,
  179.                 MUIA_List_SourceArray, popNames,
  180.                 End,
  181.             End,
  182.             End,
  183.         End,
  184.         End,
  185.     End,
  186.     End
  187.  
  188.    IF app=NIL THEN Raise(ER_APP)
  189.  
  190.    doMethod(window,[MUIM_Notify,MUIA_Window_CloseRequest,MUI_TRUE,
  191.         app,2,MUIM_Application_ReturnID,MUIV_Application_ReturnID_Quit])
  192.  
  193.    doMethod(window,[MUIM_Window_SetCycleChain,pop1,pop2,pop3,pop4,pop5,NIL])
  194.  
  195.    /* A double click terminates the popping list with a successful return value. */
  196.    doMethod(plist,[MUIM_Notify,MUIA_Listview_DoubleClick,MUI_TRUE,
  197.         pop5,2,MUIM_Popstring_Close,MUI_TRUE])
  198.  
  199. /*
  200. ** Input loop...
  201. */
  202.  
  203.    set(window,MUIA_Window_Open,MUI_TRUE);
  204.  
  205.    WHILE running
  206.  
  207.       result := doMethod(app,[MUIM_Application_Input,{signals}])
  208.    
  209.       SELECT result
  210.  
  211.      CASE MUIV_Application_ReturnID_Quit
  212.  
  213.          get(pop1,MUIA_Popasl_Active,{active})
  214.          IF active=FALSE THEN get(pop2,MUIA_Popasl_Active,{active})
  215.          IF active=FALSE THEN get(pop3,MUIA_Popasl_Active,{active})
  216.          IF active=FALSE THEN get(pop4,MUIA_Popasl_Active,{active})
  217.  
  218.          IF active
  219.         Mui_RequestA(app,window,0,NIL,'OK','Cannot quit now, still\nsome asl popups opened.',NIL)
  220.          ELSE
  221.         running := FALSE
  222.          ENDIF
  223.        ENDSELECT
  224.  
  225.        IF running OR signals THEN Wait(signals)
  226.    ENDWHILE
  227.  
  228.    set(window,MUIA_Window_Open,FALSE)
  229.  
  230. /*
  231. ** Shut down...
  232. */
  233.  
  234.    Raise(ER_NON)
  235.  
  236. EXCEPT
  237.  
  238.   IF app THEN Mui_DisposeObject(app)
  239.   IF muimasterbase THEN CloseLibrary(muimasterbase)
  240.   
  241.   SELECT exception
  242.     CASE ER_MUILIB
  243.       WriteF('Failed to open \s.\n',MUIMASTER_NAME)
  244.       CleanUp(20)
  245.  
  246.     CASE ER_APP
  247.       WriteF('Failed to create application.\n')
  248.       CleanUp(20)
  249.       
  250.   ENDSELECT
  251. ENDPROC 0
  252.  
  253.  
  254. /*
  255. ** doMethod (written by Wouter van Oortmerssen)
  256. */
  257.  
  258. PROC doMethod( obj:PTR TO object, msg:PTR TO msg )
  259.  
  260.     DEF h:PTR TO hook, o:PTR TO object, dispatcher
  261.  
  262.     IF obj
  263.         o := obj-SIZEOF object    /* instance data is to negative offset */
  264.         h := o.class
  265.         dispatcher := h.entry    /* get dispatcher from hook in iclass */
  266.         MOVEA.L h,A0
  267.         MOVEA.L msg,A1
  268.         MOVEA.L obj,A2        /* probably should use CallHookPkt, but the */
  269.         MOVEA.L dispatcher,A3    /*   original code (DoMethodA()) doesn't. */
  270.         JSR (A3)        /* call classDispatcher() */
  271.         MOVE.L D0,o
  272.         RETURN o
  273.     ENDIF
  274. ENDPROC NIL
  275.  
  276.  
  277. /*
  278. ** installhook (written by Wouter van Oortmerssen)
  279. */
  280.  
  281. PROC installhook(hook,func)
  282.     DEF r
  283.     MOVE.L hook,A0
  284.     MOVE.L func,12(A0)
  285.     LEA hookentry(PC),A1
  286.     MOVE.L A1,8(A0)
  287.     MOVE.L A4,16(A0)
  288.     MOVE.L A0,r
  289. ENDPROC r
  290.  
  291. hookentry:
  292.    MOVEM.L D2-D7/A2-A6,-(A7)
  293.    MOVE.L 16(A0),A4
  294. /* MOVE.L A0,-(A7)    I never need a PTR to the hook-structure in my
  295.               hook-functions! therefore I removed this.*/
  296.    MOVE.L A2,-(A7)
  297.    MOVE.L A1,-(A7)
  298.    MOVE.L 12(A0),A0
  299.    JSR (A0)
  300.    LEA 8(A7),A7     /* Changed from LEA 12... to LEA 8... because of
  301.                the removed MOVE above */
  302.    MOVEM.L (A7)+,D2-D7/A2-A6
  303. RTS
  304.  
  305. /*
  306. ** End Of File
  307. */
  308.